package br.com.controleVendas.dao;

import java.util.ArrayList;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;

import br.com.controleVendas.config.HibernateUtil;
import br.com.controleVendas.entity.ProdutoDto;
import br.com.controleVendas.entity.VendaProduto;
import br.com.controleVendas.entity.VendaProdutoDto;
import br.com.controleVendas.utils.ReflectionUtils;

public class VendaProdutoDao extends GenericDao<VendaProduto, VendaProdutoDto>
{

    @Override
    public VendaProdutoDto salvar(VendaProdutoDto ob)
        throws Exception
    {
        ProdutoDto produto = (ProdutoDto) ReflectionUtils.cloneToDto(ob.getProduto());
        produto = HibernateUtil.getInstance().getProdutoDao().getOne(produto);
        if(produto.getQtdEstoque() < ob.getQtdProduto())
            produto.setQtdEstoque(0);
        else
            produto.setQtdEstoque(produto.getQtdEstoque() - ob.getQtdProduto());

        HibernateUtil.getInstance().getProdutoDao().salvar(produto);

        VendaProdutoDto filtro = new VendaProdutoDto();
        filtro.setListCriterion(new ArrayList<Criterion>());
        filtro.getListCriterion().add(Restrictions.eq("venda.cdId", ob.getVenda().getCdId()));
        filtro.getListCriterion().add(Restrictions.eq("produto.cdId", ob.getProduto().getCdId()));

        filtro = getOne(filtro);
        if(filtro != null && filtro.getCdId() != null && filtro.getCdId() > 0L)
        {
            filtro.setQtdProduto(ob.getQtdProduto() + filtro.getQtdProduto());
            filtro.setVlUnitario(ob.getVlUnitario());
            filtro.setVlTotal(ob.getVlUnitario() * filtro.getQtdProduto());
            return super.salvar(filtro);
        }

        return super.salvar(ob);
    }

}
